package com.wzy.dynamicProxy.util;

import com.wzy.staticProxy.IUserDao;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 调用处理器
 * 实现调用处理器接口(InvocationHandler)
 */
public class Invaction implements InvocationHandler {

    //具体被监控的对象
    private IUserDao obj;

    public Invaction(IUserDao obj){
        this.obj = obj;
    }

    /**
     * 代理对象调用的方法，通常在该方法中实现对目标对象的访问。
     * @param proxy 当前代理对象
     * @param method 封装了 目标对象的方法
     * @param args 封装了 目标对象方法的 实参
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        beginTransaction();
        Object returnObj = (IUserDao) method.invoke(obj,args);
        endTransaction();
        return returnObj;
    }

    private void beginTransaction(){
        System.out.println("开始事务...");
    }

    private void endTransaction(){
        System.out.println("结束事务...");
    }
}
